package no.knowit.pages.prosjekt;

import java.util.List;

import no.knowit.entities.Oppdragsgiver;
import no.knowit.entities.Prosjekt;
import no.knowit.entities.Ressurs;
import no.knowit.selectModel.OppdragsgiverSelectModel;
import no.knowit.selectModel.RessursSelectModel;

import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.Log;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.corelib.components.Zone;
import org.apache.tapestry5.hibernate.annotations.CommitAfter;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

public class NyttProsjekt {
	@Property
	private Prosjekt prosjekt;

	@Property
	private RessursSelectModel ressursSelectModel;

	@Property
	private OppdragsgiverSelectModel oppdragsgiverSelectModel;

	@Property
	private Oppdragsgiver oppdragsgiver;
	@Property
	private String tekst;
	@Property
	private Prosjekt tempProsjekt;
	@Property
	private boolean tempProsjektExists;
	@Property
	private List<Prosjekt> prosjekter;

	@Property
	private List<Ressurs> prosjektteam;

	@Inject
	private Session session;
	@Component
	private Zone editZone;

	// @Inject
	// private Index index;

	@SuppressWarnings("unchecked")
	@Log
	void onActivate() {
		List<Ressurs> ressurser = session.createCriteria(Ressurs.class).list();
		ressursSelectModel = new RessursSelectModel(ressurser);
		List<Oppdragsgiver> oppdragsgivere = session.createCriteria(
				Oppdragsgiver.class).list();
		oppdragsgiverSelectModel = new OppdragsgiverSelectModel(oppdragsgivere);
		prosjekter = session.createCriteria(Prosjekt.class).list();
	}

	@Log
	void onActivate(Long id) {
		hentProsjekt(id);
		onActivate();
	}

	private void hentProsjekt(Long id) {
		if (id == null) {
			prosjekt = new Prosjekt();
		} else {
			Criteria criteria = session.createCriteria(Prosjekt.class);
			criteria.add(Restrictions.eq("id", id));
			try {
				prosjekt = (Prosjekt) criteria.list().get(0);
			} catch (Exception e) {
			}

		}
	}

	@Log
	@CommitAfter
	void onSubmitFromFormen() {
		prosjekt.setProsjektteam(prosjektteam);
		prosjekt.setOppdragsgiver(oppdragsgiver);
		System.out.println("id er " + prosjekt.getId());
		if (prosjekt.getId() != null)
			session.merge(prosjekt);
		else
			session.persist(prosjekt);
	}

	public Zone onActionFromFyllUtData(Long id) {
		Criteria criteria = session.createCriteria(Prosjekt.class);
		criteria.add(Restrictions.eq("id", id));
		prosjekt = (Prosjekt) criteria.list().get(0);
		prosjektteam = prosjekt.getProsjektteam();
		oppdragsgiver = prosjekt.getOppdragsgiver();
		return editZone;
	}

	public Object onPassivate() {
		try {
			return prosjekt.getId();
		} catch (Exception e) {
		}
		return true;
	}

}
